﻿using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using AutoplanetaTaskManager.Daos.EntityFramework;
using AutoplanetaTaskManager.Models;
using AutoplanetaTaskManager.Utilities;
using AutoplanetaTaskManager.Views.Components;

namespace AutoplanetaTaskManager.Views
{
    public partial class InfoTaskForm : Form
    {
        private readonly int _taskId;
        private readonly PostItemComponent _parentPostItemComponent;

        public InfoTaskForm(PostItemComponent postItemComponent, int taskId)
        {
            InitializeComponent();
            _taskId = taskId;
            _parentPostItemComponent = postItemComponent;
        }

        private void InfoTaskForm_Load(object sender, EventArgs e)
        {
            Task task = new TaskDao().Get(_taskId);

            clientNameTextBox.Text = task.ClientName;
            if (task.PostId != null)
                postNameTextBox.Text = new PostDao().Get((int)task.PostId).Name;
            taskDateTimePicker.Value = task.TaskDateTime.GetValueOrDefault();
            timeMaskedTextBox.Text = string.Format("{0:HH:mm}", task.TaskDateTime.GetValueOrDefault());
            countHoursComboBox.DataSource = Config.GetCountHoursList();
            if (task.CountHours != null)
                countHoursComboBox.SelectedItem = task.CountHours.Value;
            descriptionTextBox.Text = task.Description;
            if (task.Finished != null)
                finishedCheckBox.Checked = (bool)task.Finished;
        }

        private void cancelButton_Click(object sender, EventArgs e)
        {
            Dispose();
        }

        private void applyButton_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(clientNameTextBox.Text))
            {
                MessageBox.Show(
                        "Нельзя изменить запись. Вы должны заполнить поле \"Клиент\".",
                        "Ошибка изменения записи \"Задание\"!");
            }
            else if (!new Regex(@"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[03][0]$").IsMatch(timeMaskedTextBox.Text))
            {
                MessageBox.Show(
                        "Нельзя изменить запись. Поле \"Дата\\время\" заполнено не верно.",
                        "Ошибка изменения записи \"Задание\"!");
            }
            else
            {

                TaskDao taskDao = new TaskDao();
                Task task = taskDao.Get(_taskId);
                task.ClientName = clientNameTextBox.Text;
                task.TaskDateTime =
                    DateTime.Parse(string.Format("{0:d/M/yyyy} {1}", taskDateTimePicker.Value, timeMaskedTextBox.Text));
                task.CountHours = (double) countHoursComboBox.SelectedValue;
                task.Description = descriptionTextBox.Text;
                task.Finished = finishedCheckBox.Checked;

                if (taskDao.CheckAbilityUpdating(task))
                {
                    taskDao.Update(task);
                    _parentPostItemComponent.UpdateContent();
                    Dispose();
                }
                else
                    MessageBox.Show(
                        "Нельзя изменить запись. Возможно задание выходит за пределы допустимых временных рамок.",
                        "Ошибка изменения записи \"Задание\"!");
            }
        }
    }
}
